package com.lonely.fx.bind;

import javafx.beans.property.SimpleSetProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableSet;

/**
 * @date: 2022-07-23 17:33
 * @author: ztkj-hzb
 * @description: 基于List类型的单向绑定
 **/
public class BindWithSetSettingMain {


    public static void main(String[] args) {

        ObservableSet<String> observableSet1 = FXCollections.observableSet("A", "B");
        SimpleSetProperty<String> setProperty1 = new SimpleSetProperty<>(observableSet1);

        ObservableSet<String> observableSet2 = FXCollections.observableSet("A", "B");
        SimpleSetProperty<String> setProperty2 = new SimpleSetProperty<>(observableSet2);

        System.out.println(String.format("setProperty1: %s , setProperty2: %s", setProperty1.get(), setProperty2.get()));
        System.out.println(String.format("set1: %s , set2: %s", setProperty1.get(), setProperty2.get()));


        //bind --》 setProperty1 绑定到 setProperty2 上
//        setProperty1.bind(setProperty2);
//
//        setProperty1.add("C");
//        setProperty2.add("D");
//
//        //observableSet1.add("C1");
//        //observableSet2.add("D1");
//        System.out.println(String.format("setProperty1: %s , setProperty2: %s", setProperty1.get(), setProperty2.get()));
//        System.out.println(String.format("set1: %s , set2: %s", setProperty1.get(), setProperty2.get()));

        //bind --> setProperty2 绑定到 setProperty1 上,维护两个list
//        setProperty1.bindContent(setProperty2);
//        setProperty1.add("C");
//        setProperty2.add("D");
//
//        //observableSet1.add("C1");
//        //observableSet2.add("D1");
//        System.out.println(String.format("setProperty1: %s , setProperty2: %s", setProperty1.get(), setProperty2.get()));
//        System.out.println(String.format("set1: %s , set2: %s", setProperty1.get(), setProperty2.get()));


        //双向同步，
        setProperty1.bindBidirectional(setProperty2);
        setProperty1.add("C");
        setProperty2.add("D");

        observableSet1.add("C1");
        observableSet2.add("D1");
        System.out.println(String.format("setProperty1: %s , setProperty2: %s", setProperty1.get(), setProperty2.get()));
        System.out.println(String.format("set1: %s , set2: %s", setProperty1.get(), setProperty2.get()));

        //与 bindBidirectional 相比在于， observableSet1.add("C1")这行代码有效
//        setProperty1.bindContentBidirectional(setProperty2);
//        setProperty1.add("C");
//        setProperty2.add("D");
//
//        observableSet1.add("C1");
//        observableSet2.add("D1");
//        System.out.println(String.format("setProperty1: %s , setProperty2: %s", setProperty1.get(), setProperty2.get()));
//        System.out.println(String.format("set1: %s , set2: %s", setProperty1.get(), setProperty2.get()));


    }


}
